home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 2.1 KB | 97 lines |
- 10 ' ****************************
- 20 ' ** SPHERE **
- 30 ' ****************************
- 40 '
- 50 CLEAR
- 60 SCREEN 1
- 70 KEY OFF
- 80 CLS
- 90 LOCATE 7,1
- 100 PRINT "(degrees) ...
- 110 PRINT
- 120 INPUT "Rotation around the Y axis ";H
- 130 INPUT "Rotation around the X axis ";P
- 140 INPUT "Rotation around the Z axis ";B
- 150 INPUT "And how many stripes ";STRIPES
- 160 '
- 170 'initialize things
- 180 DEF FNDTR(DEGREES)=3.14159*DEGREES/180
- 190 DEF FNATN2(Y,X) = -ATN(Y/(X-(X=0)))*(X<>0)-1.5708*SGN(Y) *(X=0)+3.14159*(X<0)*((Y>=0)-(Y<0))
- 200 OPTION BASE 1
- 210 DIM MROT(3,3)
- 220 CLS
- 230 '
- 240 'build the rotation matrix
- 250 SH=SIN(FNDTR(-H))
- 260 CH=COS(FNDTR(-H))
- 270 SP=SIN(FNDTR(P))
- 280 CP=COS(FNDTR(P))
- 290 SB=SIN(FNDTR(B))
- 300 CB=COS(FNDTR(B))
- 310 MROT(1,1)=CH*CB+SH*SP*SB
- 320 MROT(1,2)=CH*SB-SH*SP*CB
- 330 MROT(1,3)=SH*CP
- 340 MROT(2,1)=-CP*SB
- 350 MROT(2,2)=CP*CB
- 360 MROT(2,3)=SP
- 370 MROT(3,1)=CH*SP*SB-SH*CB
- 380 MROT(3,2)=-SH*SB-CH*SP*CB
- 390 MROT(3,3)=CH*CP
- 400 '
- 410 'stripe lines
- 420 FOR PHI = 0 TO 180 STEP 180/STRIPES
- 430 CPHI=COS(FNDTR(PHI))
- 440 SPHI=SIN(FNDTR(PHI))
- 450 XL=0
- 460 YL=0
- 470 FOR THETA = 0 TO 360 STEP 15
- 480 CTHETA=COS(FNDTR(THETA))
- 490 STHETA=SIN(FNDTR(THETA))
- 500 XS=CTHETA*SPHI
- 510 YS=STHETA*SPHI
- 520 ZS=CPHI
- 530 XR=MROT(1,1)*XS+MROT(2,1)*YS+MROT(3,1)*ZS
- 540 YR=MROT(1,2)*XS+MROT(2,2)*YS+MROT(3,2)*ZS
- 550 ZR=MROT(1,3)*XS+MROT(2,3)*YS+MROT(3,3)*ZS
- 560 XSL=88
- 570 XSR=232
- 580 YSL=160
- 590 YSR=40
- 600 XSC=(XR+1)*(XSR-XSL)/2+XSL
- 610 YSC=(YR+1)*(YSR-YSL)/2+YSL
- 620 IF PHI <> 0 THEN 670
- 630 THETA = 360
- 640 XPA = XSC
- 650 YPA = YSC
- 660 ZSGN = SGN(ZR)
- 670 IF ZR >= 0 THEN 700
- 680 XL = 0
- 690 YL = 0
- 700 IF XL OR YL THEN LINE(XL,YL)-(XSC,YSC)
- 710 XL=XSC
- 720 YL=YSC
- 730 NEXT THETA,PHI
- 740 CIRCLE (160,100),72
- 750 IF ZSGN <> -1 THEN 780
- 760 XPA = 320 - XPA
- 770 YPA = 200 - YPA
- 780 ANG=FNATN2(100-YPA,160-XPA)
- 790 FOR DIST = 1 TO 199
- 800 XPA=XPA+COS(ANG)
- 810 YPA=YPA+SIN(ANG)
- 820 IF POINT (XPA,YPA) <> 0 THEN 850
- 830 CLR = CLR MOD 3 + 1
- 840 PAINT (XPA,YPA),CLR,3
- 850 NEXT DIST
- 860 PAINT(1,1),0,3
- 870 BGD=(BGD+1)MOD 16
- 880 PLT=(PLT+1)MOD 2
- 890 IF BGD=0 AND PLT=0 THEN BGD=1
- 900 COLOR BGD,PLT
- 910 '
- 920 ' One second delay
- 930 TM$ = TIME$
- 940 WHILE TIME$ = TM$
- 950 WEND
- 960 GOTO 870
-